'    Copyright 2008 Jan Molnar <jan.molnar@abds.de>
'
'    This file is part of JCQ.

'    JCQ is free software: you can redistribute it and/or modify
'    it under the terms of the GNU General Public License as published by
'    the Free Software Foundation, either version 2 of the License, or
'    (at your option) any later version.

'    JCQ is distributed in the hope that it will be useful,
'    but WITHOUT ANY WARRANTY; without even the implied warranty of
'    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
'    GNU General Public License for more details.

'    You should have received a copy of the GNU General Public License
'    along with JCQ. If not, see <http://www.gnu.org/licenses/>.

Public NotInheritable Class SerializationContext
    Private Shared ReadOnly _ContextType As Type = GetType(SerializationContext)
    Private Shared ReadOnly _AssemblyName As String = _ContextType.Assembly.GetName.Name

    Private Sub New()

    End Sub

    Private Shared Function GetSnacMapping(ByVal desc As SnacDescriptor) As Type
        Dim typeName As String
        Dim snacType As Type

        typeName = String.Format("{1}.Snac{0}", SnacDescriptor.GetKey(desc).Replace(","c, ""), _AssemblyName)
        snacType = Type.GetType(typeName, False, True)

        Return snacType
    End Function

    Public Shared Function DeserializeSnac(ByVal offset As Integer, ByVal desc As SnacDescriptor, ByVal bytes As List(Of Byte)) As Snac
        Dim data As List(Of Byte) = bytes.GetRange(offset, bytes.Count - offset)

        Dim type As Type
        Dim x As Snac

        type = GetSnacMapping(desc)

        If type Is Nothing Then Return Nothing

        x = DirectCast(Activator.CreateInstance(type), Snac)
        x.Deserialize(data)

        Return x
    End Function
End Class
